
//  reduce

// function flat(arr1) {
//     let res = arr1.reduce((pre, item) => {
//         return pre.concat(Array.isArray(item) ? flat(item) : item)
//     }, [])
//     return res
// }

// ...解构
// function flatten(arr){
//     while(arr.some(item => Array.isArray(item))){
//       arr = [].concat(...arr);
//     }
//     return arr;
//   }
  
//   const arr = [1, [2, [3, 4]]];
//   console.log(flatten(arr));


//   toString()
//   只适应于数字或字符串
// const flaten = (arr) => arr.toString().split(',').map((item) => +item)

// console.log(flaten(arr))

// 递归

function flat(arr) {
    let res = []
    arr.forEach((item, i, arr) =>{
        if(Array.isArray(item)) {
            res = res.concat(flat(item))
        }
        else {
            res.push(item)
        }
    })
    return res
}

let arr = [1,[1,2,3,4],[1,[1,2]]]
console.log(flat(arr));

// apply

function flat1(arr) {
    while(arr.some(item => Array.isArray(item))) {
        arr = [].concat.apply([], arr)
    }
    return arr
}
console.log(flat1(arr));